//BooksModel 
const mongoose = require('./db'); //引入mongoose模块

/**
 trim: true //去首尾空格
 lowercase: true //转化为小写
 uppercase: true //转化为大写
 */
/**
 * 除了 mongoose 内置的修饰符以外， 我们还可以通过 set（ 建议使用） 修饰符在增加数据的时候对数据进行格式化。 也可以通过 get（ 不建议使用） 在实例获取数据的时候对数据进行格式化。
 */
var BooksSchema = mongoose.Schema({
  name: String,
  title: {
    type: String,
    trim: true,
    uppercase: true,
    required: true, //必须有
    index: true //index :true 就是增加所以
  },
  text: {
    type: String,
    trim: true,
    required: true, //必须有
    default: "我是测试内容" //默认值
  },
  url: {
    type: String,
    set(url) { //  url 没有http 或者https 增加http
      if (!url) return url;
      if (url.indexOf('http://') != 0 && url.indexOf('https://') != 0) {
        url = 'http://' + url;
      }
      return url;
    }
  },
  status: {
    type: Number,
    default: 1 //默认值
  }
})
//自定义静态方法 查title
BooksSchema.statics.findByTitle = function (title, cb) {

  //通过 find方法获取 title的数据    this 关键字获取当前的model,cd是回调
  this.find({
    "title": title
  }, function (err, docs) {
    cb(err, docs)
  })
}
//  实例方法  创建后可以调用,  this  是当前传入对象的内容,不是查询结果
BooksSchema.methods.print = function () {
  console.log('我是一个实例方法')
  console.log(this)
}
//name: string, schema?: mongoose.Schema<any, any, any, any>, collection?: string, options
//modelName,schema对象,collection，options配置项
var BooksModel = mongoose.model("Books", BooksSchema, "books");

module.exports = BooksModel;